#ifndef MYDATA_H
#define MYDATA_H
/*************************************************
 *	文件名称：mydata.h
 *	文件说明：

 *	程序平台：for linux
 *	文件作者：Jason <jasonsunsoft@163.com>
 *	文件时间：2014年9月5日 21:32
*************************************************/

#include <stdlib.h>
#include "common.h"

#define STACK_INIT_SIZE	100 	//存储空间初始分配量
#define STACKINCREMENT	10 		//存储空间分配增量

typedef int SElemType;

//-------------------栈的顺序存储表示-------------------
typedef struct {
	SElemType *base;			//在栈构造之前和销毁之后，base的值为NULL
	SElemType *top;				//栈顶指针
	int stacksize;				//当前已分配的存储空间，以元素为单位
}SqStack;

//-------------------基本操作的函数说明-------------------

Status InitStack(SqStack *S);
//初始条件：
//操作结果：构造一个空栈S

Status DestroyStack(SqStack *S);
//初始条件：栈S已存在
//操作结果：栈S被销毁

Status ClearStack(SqStack *S);
//初始条件：栈S已存在
//操作结果：将S清空

Status StackEmpty(SqStack S);
//初始条件：栈S已存在
//操作结果：若栈S为空栈，则返回TRUE，否则返回FALSE

int StackLength(SqStack S);
//初始条件：栈S已存在
//操作结果：返回S的元素个数，即栈的长度。

Status GetTop(SqStack S, SElemType *e);
//初始条件：栈S已存在且非空
//操作结果：用e返回S的栈顶元素

Status Push(SqStack *S, SElemType e);
//初始条件：栈S已存在
//操作结果：插入元素e为新的栈顶元素

Status Pop(SqStack *S, SElemType *e);
//初始条件：栈S已存在且非空
//操作结果：删除S的栈顶元素，并用e返回其值。

Status StackTraverse(SqStack S,Status (*visit)(SElemType));
//初始条件：栈S已存在且非空
//操作结果：从栈底到栈顶依次对S的每个数据元素调用visit（）。一旦visit（）失败，则操作失败。

Status PriStack(SElemType e);


#endif //MYDATA_H
